/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package energiebedrijf.Classes;

import java.io.Serializable;
import java.util.*;

/**
 * Een klasse om perceel gegevens in op te slaan en de gerelateerde gegevens
 * @author pdb
 */
public class Perceel implements Serializable {

    private Integer perceelId = -1;
    private String straatNaam = "";
    private String huisNummer = "";
    private String postCode = "";
    private String plaats = "";
    private Date meterOpname = new Date();
    private Date factuurDatum = new Date();
    private Klant Klant;
    private int KlantId;
    private Gas Gas;
    private Electriciteit Electriciteit;
    private Water Water;
    private Boolean IsChanged;

    /**
     * Standaard lege constructor doet verder niets
     */
    public Perceel() {
    }

    /**
     * Constructor waarbij meteen het id ingesteld kan worden
     * @param perceelId Het perceel ID
     */
    public Perceel(Integer perceelId) {
        this.perceelId = perceelId;
    }

    /**
     * Haalt het ID van dit perceel op.
     * @return Een integer met het ID
     */
    public Integer getPerceelId() {
        return perceelId;
    }

    /**
     * Stelt het perceel ID in
     * @param perceelId Het perceel ID
     */
    public void setPerceelId(Integer perceelId) {
        this.perceelId = perceelId;
    }

    /**
     * Haalt het huisnummer van dit perceel op
     * @return Een string met het huisnummer
     */
    public String getHuisnummer() {
        return huisNummer;
    }

    /**
     * Stelt het huisnummer van dit perceel in.
     * @param huisNummer Een string met het huisnummer
     */
    public void setHuisnummer(String huisNummer) {
        if (!this.getHuisnummer().equals(huisNummer)) {
            this.setIsChanged(true);
        }
        this.huisNummer = huisNummer;
    }

    /**
     * Haalt de straatnaam van dit perceel op.
     * @return Een string met de straatnaam
     */
    public String getStraatnaam() {
        return straatNaam;
    }

    /**
     * Stelt de straatnaam van dit perceel in. 
     * @param straatNaam Een string met de straatnaam
     */
    public void setStraatnaam(String straatNaam) {
        if (!this.getStraatnaam().equals(straatNaam)) {
            this.setIsChanged(true);
        }
        this.straatNaam = straatNaam;
    }

    /**
     * Haalt de postcode van dit perceel op.
     * @return Een string met de postcode
     */
    public String getPostcode() {
        return postCode;
    }

    /**
     * Stelt de postcode van dit perceel in
     * @param postCode Een string met de postcode.
     */
    public void setPostcode(String postCode) {
        if (!this.getPostcode().equals(postCode)) {
            this.setIsChanged(true);
        }
        this.postCode = postCode;
    }

    /**
     * Haalt de plaatsnaam van dit perceel op.
     * @return Een string met de plaatsnaam
     */
    public String getPlaats() {
        return plaats;
    }

    /**
     * Stelt de plaatsnaam van dit perceel in.
     * @param plaats Een string met de plaatsnaam
     */
    public void setPlaats(String plaats) {
        if (!this.getPlaats().equals(plaats)) {
            this.setIsChanged(true);
        }
        this.plaats = plaats;
    }

    /**
     * Haalt de datum op waarop voor het laatst de meterstand is opgenomen.
     * @return Een Date met de meteropname datum
     */
    public Date getMeteropname() {
        return meterOpname;
    }

    /**
     * Stelt de datum van de laatste meteropname in.
     * @param meterOpname Een Date met de meteropname datum
     */
    public void setMeteropname(Date meterOpname) {
        if (!this.getMeteropname().equals(meterOpname)) {
            this.setIsChanged(true);
        }
        this.meterOpname = meterOpname;
    }

    /**
     * Haalt de datum op waarop de laatste keer een factuur is gestuurd.
     * @return Een Date met de factuur datum.
     */
    public Date getFactuurDatum() {
        return factuurDatum;
    }

    /**
     * Stelt de datum in waarop voor het laatst een factuur is gestuurd.
     * @param factuurDatum Een Date met de factuur datum
     */
    public void setFactuurDatum(Date factuurDatum) {
        if (!this.getFactuurDatum().equals(factuurDatum)) {
            this.setIsChanged(true);
        }
        this.factuurDatum = factuurDatum;
    }

    /**
     * Geeft het klant object terug waar dit perceel bij hoort.
     * @return Een Klant object
     */
    public Klant getKlant() {
        return Klant;
    }

    /**
     * Stelt het Klant object in waar dit perceel bij hoort.
     * @param klant Een Klant object
     */
    public void setKlant(Klant klant) {
        this.Klant = klant;
        this.setKlantId(klant.getKlantId());
    }

    /**
     * Haalt het Gas object op dit bij dit perceel hoort
     * @return Een Gas object
     */
    public Gas getGas() {
        return Gas;
    }

    /**
     * Stelt het Gas object in wat bij dit perceel hoort.
     * @param Gas
     */
    public void setGas(Gas Gas) {
        this.Gas = Gas;
        if (this.getGas() != null) {
            this.Gas.setPerceel(this);
        }
    }

    /**
     * Een functie om makkelijk te kunnen zien of dit perceel een gas aansluiting
     * heeft
     * @return Een string met Ja of Nee
     */
    public String getGasAansluiting() {
        if (this.Gas == null) {
            return "Nee";
        } else {
            return "Ja";
        }
    }

    /**
     * Haalt het Electriciteit object op wat bij dit perceel hoort.
     * @return Een Electriciteit object
     */
    public Electriciteit getElectriciteit() {
        return this.Electriciteit;
    }

    /**
     * Stelt het Electriciteit object in wat bij dit perceel hoort
     * @param Electriciteit Een Electriciteit object
     */
    public void setElectriciteit(Electriciteit Electriciteit) {
        this.Electriciteit = Electriciteit;
        if (this.getElectriciteit() != null) {
            this.Electriciteit.setPerceel(this);
        }
    }

    /**
     * Een functie om makkelijk te kunnen zien of dit perceel een electriciteit
     * aansluiting heeft
     * @return Een string met Ja of Nee
     */
    public String getElectriciteitAansluiting() {
        if (this.Electriciteit == null) {
            return "Nee";
        } else {
            return "Ja";
        }
    }

    /**
     * Haalt het Water object op wat bij dit perceel hoort
     * @return Een Water object
     */
    public Water getWater() {
        return this.Water;
    }

    /**
     * Stelt het Water object in wat bij dit perceel hoort.
     * @param Water Een Water object
     */
    public void setWater(Water Water) {
        this.Water = Water;
        if (this.getWater() != null) {

            this.Water.setPerceel(this);
        }
    }

    /** 
     * Een functie om makkelijk te kunnen zien of dit perceel een Water aansluiting
     * heeft
     * @return Een string met Ja of Nee
     */
    public String getWaterAansluiting() {
        if (this.Water == null) {
            return "Nee";
        } else {
            return "Ja";
        }
    }

    /**
     * Deze method retouneert een hashcode voor dit perceel
     * @return Een hashcode
     */
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (perceelId != null ? perceelId.hashCode() : 0);
        return hash;
    }

    /**
     * Vergelijkt 2 perceel objecten met elkaar
     * @param object Het perceel om mee te vergelijken
     * @return True als de percelen gelijk zijn, anders false
     */
    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Perceel)) {
            return false;
        }
        Perceel other = (Perceel) object;
        if ((this.perceelId == null && other.perceelId != null) || (this.perceelId != null && !this.perceelId.equals(other.perceelId))) {
            return false;
        }
        return true;
    }

    /**
     * Geeft een string terug met perceel gegevens
     * @return String met perceel gegevens
     */
    @Override
    public String toString() {
        return "energiebedrijf.Perceeel[perceelId=" + perceelId + "]";
    }

    /**
     * Geeft het klant id waar dit perceel bij hoort terug
     * @return Het klant id
     */
    public int getKlantId() {
        return KlantId;
    }

    /**
     * Stelt het klant id waar dit perceel bij hoort in
     * @param KlantId Het klant id
     */
    public void setKlantId(int KlantId) {
        this.KlantId = KlantId;
    }

    /**
     * Geeft aan of de gegevens van dit perceel gewijzigd zijn of niet
     * @return True als ze gewijzigd zijn, anders false
     */
    public Boolean getIsChanged() {
        return IsChanged;
    }

    /**
     * Stelt in of dit perceel gewijzigd is of niet
     * @param IsChanged True als gewijzigd anders false
     */
    public void setIsChanged(Boolean IsChanged) {
        this.IsChanged = IsChanged;
    }
}
